構築、破棄、コピー

空のコンテナー・コンストラクター


concurrent_vector(); 

explicit concurrent_vector( const allocator_type& alloc );

空の concurrent_vector を構築。

利用可能であれば、アロケーター alloc を使用してメモリーを割り当てます。

要素のシーケンスから構築


explicit concurrent_vector( size_type count, const value_type& value, 
                            const allocator_type& alloc = allocator_type() );

alloc を使用して、count 個の value のコピーを含む concurrent_vector を構築します。



explicit concurrent_vector( size_type count, 
                            const allocator_type& alloc = allocator_type() );

alloc を使用して、デフォルトで構築された n 個のインプレース要素を含む concurrent_vector を構築します。



template <typename InputIterator> 
concurrent_vector( InputIterator first, InputIterator last, 
                   const allocator_type& alloc = allocator_type() );

アロケーター alloc を使用して、半開区間 [first, last) のすべての要素を含む concurrent_vector を構築します。

要件: InputIterator タイプは、[input.iterators] ISO C++ 標準の InputIterator 要件を満たしている必要があります。



concurrent_vector( std::initializer_list<value_type> init, 
                   const allocator_type& alloc = allocator_type() );

concurrent_vector(init.begin(), init.end(), alloc) と等価です。

コンストラクターをコピー


concurrent_vector( const concurrent_vector& other ); 

concurrent_vector( const concurrent_vector& other, 
                   const allocator_type& alloc );

other のコピーを作成します。

アロケーター引数が指定されていない場合、std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()) を呼び出して取得できます。

other との同時操作が行われると動作は未定義です。

ムーブ・コンストラクター


concurrent_vector( concurrent_vector&& other ); 

concurrent_vector( concurrent_vector&& other, 
                   const allocator_type& alloc );

ムーブ・セマンティクスを使用して、other の内容で concurrent_vector を作成します。

other は有効のままですが、未指定の状態となります。

アロケーター引数が指定されていない場合、std::move(other.get_allocator()) を呼び出して取得できます。

other との同時操作が行われると動作は未定義です。

デストラクター

~concurrent_vector();

concurrent_vector を破棄します。ストアされた要素のデストラクターを呼び出してストレージの割り当てを解除します。

*this との同時操作が行われると動作は未定義です。

代入操作

concurrent_vector& operator=( const concurrent_vector& other );

*this のすべての要素を other の要素をコピーして置き換えます。

std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::valuetrue の場合、アロケーターのコピーを割り当てます。

*thisother の同時操作が行われると動作は未定義です。

戻り値: *this への参照。


concurrent_vector& operator=( concurrent_vector&& other ) noexcept(/*See below*/);

*this のすべての要素を、ムーブ・セマンティクスによって other の要素で置き換えます。

other は有効のままですが、未指定の状態となります。

std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::valuetrue の場合、アロケーターの要素を移動して割り当てます。

*thisother の同時操作が行われると動作は未定義です。

戻り値: *this への参照。

例外: 具体的に noexcept は以下です。


noexcept(std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value || 
         std::allocator_traits<allocator_type>::is_always_equal::value)

concurrent_vector& operator=( std::initializer_list<value_type> init );

*this のすべての要素を init の要素して置き換えます。

*this との同時操作が行われると動作は未定義です。

戻り値: *this への参照。

代入

void assign( size_type count, const value_type& value );

*this のすべての要素を value の要素をコピー count で置き換えます。



template <typename InputIterator> 
void assign( InputIterator first, InputIterator last );

*this のすべての要素を半開区間 [first, last) の要素で置き換えます。

このオーバーロードは、InputIteratorタイプが [input.iterators] ISO C++ 標準の InputIterator 要件を満たしている場合にのみオーバーロード解決に影響します。


void assign( std::initializer_list<value_type> init );

assign(init.begin(), init.end()) と等価です。

get_allocator

allocator_type get_allocator() const;

戻り値: *this に関連付けられているアロケーターのコピーを返します。